import get from 'lodash-es/get.js';
import { unref } from 'vue';

function getWidth(column, width) {
  return column.width || width;
}

export function getColumnWidth(column) {
  const title = column.title || column.label;
  if (/昵称$|姓名$|人$/.test(title)) {
    return getWidth(column, 120);
  }
  if (/^性别|民族/.test(title)) {
    return getWidth(column, 100);
  }
  if (/职务/.test(title)) {
    return getWidth(column, 120);
  }
  if (/身份证|证件号码/.test(title)) {
    return getWidth(column, 200);
  }
  if (/联系方式|电话|手机号/.test(title)) {
    return getWidth(column, 180);
  }
  if (/人脸|照片|LOGO|图片|图标|头像|图$/.test(title)) {
    return getWidth(column, 90);
  }
  if (/数$|量$/.test(title)) {
    return getWidth(column, 120);
  }
  if (/时间$|时限$|日期$/.test(title)) {
    return getWidth(column, 200);
  }
  if (/状态$/.test(title)) {
    return getWidth(column, 120);
  }
  if (/车牌号/.test(title)) {
    return getWidth(column, 140);
  }
  if (/方向/.test(title)) {
    return getWidth(column, 80);
  }
  if (/设备序列号/.test(title)) {
    return getWidth(column, 160);
  }
  if (/预警类型/.test(title)) {
    return getWidth(column, 160);
  }
  if (/处理状态/.test(title)) {
    return getWidth(column, 120);
  }
  return getWidth(column);
}

export function handleTableColumns(columns) {
  if (!Array.isArray(columns)) {
    return [];
  }
  return columns.reduce((res, item, index) => {
    if (!item || typeof item !== 'object') {
      return res;
    }
    let ellipsis = get(item, 'showOverflow', get(item, 'ellipsis'));
    let showOverflow = typeof ellipsis !== 'undefined' ? ellipsis : 'tooltip';
    item = Object.assign({}, item, {
      field: item.field || item.dataIndex || get(item, 'scopedSlots.customRender'),
      title: item.title || item.label,
      align: item.align || 'center',
      showOverflow: showOverflow,
      visible: unref(item.visible),
    });
    item.width = getColumnWidth(item);
    if (item.field === 'action' || item.title === '操作') {
      item.align = 'center';
      item.fixed = 'right';
      item.showOverflow = false;
    }
    if (item.field && item.visible !== false) {
      res.push(item);
    }
    return res;
  }, []);
}
